import java.io.Serializable;
import java.util.HashMap;
import java.util.Observable;

/**
 * Classe de gestion d'une parution
 *
 */
public class Parution extends Observable implements Serializable {

	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************

	private static final long serialVersionUID = 1L;
	
	// ************************************************************************************************************
	// Attributs
	// ******************************************
	
	private String _id;
	private Periodique _periodique;
	private HashMap<Integer, Article> _lesArticles;

	private int _derNumArticle;
	
	
	
	///////////////////////////////////////
	// Constructeur
	///////////////////////////////////////
			
	public Parution(String id, Periodique p){
		this.setID(id);
		this.setArticles(new HashMap<Integer, Article>());
		this.setPeriodique(p);
		this.setDerNumArticle(0);
	}

	
	///////////////////////////////////////
	//Affecteurs
	///////////////////////////////////////
	public void setID(String num){
		_id = num;
	}
	
	///////////////////////////////////	
	private void setDerNumArticle(int i) {
		_derNumArticle = i;
	}
	public void setPeriodique(Periodique p){
		_periodique = p;
	}
	
	///////////////////////////////////
	public void setArticle(Article a, int num) {
		this.getArticles().put(num, a);

	}


	public void notifierObservateurs() {
		this.setChanged();
		this.notifyObservers();	
	}
	
	///////////////////////////////////
	public void setArticles(HashMap<Integer, Article> articles) {
		_lesArticles = articles;
	}
	
	public String getId(){
		return _id;
	}
	
	///////////////////////////////////////
	//Accesseurs
	///////////////////////////////////////
	private int getDerNumArticle() {
		return _derNumArticle;
	}

	public HashMap<Integer, Article> getArticles() {
		return _lesArticles;
	}
	
	///////////////////////////////////
	public Periodique getPeriodique() {
		return _periodique;
	}
	
	
	/**
	 * lier un article à la parution, a partir du titre et du numéro de page. Génère un numéro d'article unique
	 * @param titre
	 * @param numeroPageInt
	 * @return l'article enregistré
	 */
	public Article ajouterArticle(String titre, int numeroPageInt) {
// Generation du numero chronologique de l'exemplaire
		int numero = this.genererNumeroArticle();


		Article article = new Article(numero, titre, numeroPageInt, this);

		this.setArticle(article, numero);
		// notifie ses observateurs du changement
		this.notifierObservateurs();
		
		return article;
	}

	/**
	 * 
	 * @return le numéro d'article généré
	 */
	private int genererNumeroArticle() {
		this.setDerNumArticle(this.getDerNumArticle() + 1);
		return getDerNumArticle() ;
	}
	
}
